home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
551-575
/
disk_560
/
muchmore
/
txt.lzh
/
txt
/
MMQText.asm
< prev
next >
Wrap
Assembly Source File
|
1991-10-27
|
17KB
|
732 lines
;*---------------------------------------------------------------------------
; :Program. MMQText.ASM
; :Contents. Procedure for fast text-output used within MuchMore
; :Author. Fridtjof Siebert
; :Address. Nobileweg 67, D-7-Stgt-40
; :Shortcut. [fbs]
; :History. V 2.0 03-Sep-89 [fbs]
; :History. V 2.6 26-Jun-90 [fbs] removed globals
; :History. V 2.8 26-Dez-90 [fbs] CopyLine removed
; :Copyright. Public Domain
; :Language. 68000 Assembler
; :Translator. a68k
;---------------------------------------------------------------------------*
XDEF QText ; QText Procedure
XDEF GetFontData ; GetFontData Procedure
; BitMap:
bm_BytesPerRow = 0
bm_Rows = 2
bm_Flags = 4
bm_Depth = 5
bm_Pad = 6
bm_Planes = 8
bm_SIZEOF = 40
;* d1 - vertical position (pixel position)
;* a0 - Pointer to String (0C-Termination)
;* a1 - Pointer to BitMap to store String
;* a2 - Pointer to TextFont
;
;Special codes:
; 1..16: background color (x-1) & 3, foreground ((x-1) / 4) & 3
; 17: switch to plain text
; 18: switch to italics
; 19: switch to bold
; 20: switch to italics and bold
; 21: underline on
; 22: underline off
; Register use:
; D0: character
; D1: vertical position
; D2: bytesperrow
; D3: to examine character
; D4: Offset of fontstyle
; D5: offset (row * bytesperrow)
; A0: points to string
; A1: plane # 1
; A2: fontdata
; A3: character address in font.chardata
; A4: plane # 2;
; A5: procedure to type in correct color
; A6: negative character
p1 EQUR A4;
p2 EQUR A1;
chr EQUR A3;
nch EQUR A6;
col EQUR A5;
char EQUR d0
vert EQUR d1
bpr EQUR d2
scratch EQUR d3
style EQUR d4
dadr EQUR d5
ulin EQUR d6 ; underline on ?
nuln EQUR d7 ; underline off?
QText:
move.l A5,-(A7);
lea Col04(PC),col;
clr style;
sf ulin;
st nuln;
move bm_BytesPerRow(a1),bpr;
ext.l bpr;
mulu bpr,vert;
move.l bm_Planes(a1),p1; position in plane #1
move.l bm_Planes+4(a1),p2; position in plane #2
add.l vert,p2;
add.l vert,p1; add offset within plane
move.l p1,chr;
move.l p2,nch;
move bpr,vert;
subq #1,vert;
clrline:
clr.l (chr)+ ; clear line
clr.l (chr)+
clr.l (nch)+
clr.l (nch)+
dbra vert,clrline;
move bpr,vert;
asl #3,vert;
sub bpr,vert; vert = 7*bpr;
loop:
move.b (a0)+,char; ; get character
beq return;
cmp.b #$20,char;
bcc \typechr;
cmp.b #17,char;
blt \newcol;
cmp.b #21,char;
blt \newstyle;
seq ulin;
sne nuln;
bra.s loop;
\newstyle;
sub.b #17,char;
ext.w char;
move char,style;
asl #1,style;
add char,style;
asl #8,style;
add style,style;
bra loop;
\newcol:
ext.w char;
add.w char,char;
move.w char,scratch;
add.w char,char;
add.w scratch,char;
jmp \whichCol-6(PC,char.w);
\whichCol:
lea Col00(PC),col;
bra.s \nxt;
lea Col01(PC),col;
bra.s \nxt;
lea Col02(PC),col;
bra.s \nxt;
lea Col03(PC),col;
bra.s \nxt;
lea Col04(PC),col;
bra.s \nxt;
lea Col05(PC),col;
bra.s \nxt;
lea Col06(PC),col;
bra.s \nxt;
lea Col07(PC),col;
bra.s \nxt;
lea Col08(PC),col;
bra.s \nxt;
lea Col09(PC),col;
bra.s \nxt;
lea Col10(PC),col;
bra.s \nxt;
lea Col11(PC),col;
bra.s \nxt;
lea Col12(PC),col;
bra.s \nxt;
lea Col13(PC),col;
bra.s \nxt;
lea Col14(PC),col;
bra.s \nxt;
lea Col15(PC),col;
\nxt:
bra loop;
\typechr:
sub.b #$20,char;
and #$ff,char;
asl #3,char;
add style,char;
lea 0(a2,char.w),chr;
lea $1800(chr),nch
jmp (col);
Col00:
bra next;
Col01:
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
adda.w bpr,p1;
move.b (nch)+,(p1);
and.b nuln,(p1);
suba.w vert,p1;
bra next;
Col02:
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
adda.w bpr,p2;
move.b (nch)+,(p2);
and.b nuln,(p2);
suba.w vert,p2;
bra next;
Col03:
move.b (nch),(p1);
move.b (nch)+,(p2);
move bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch),0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
and.b nuln,0(p1,dadr.w);
and.b nuln,0(p2,dadr.w);
bra next;
Col04:
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
adda.w bpr,p1;
move.b (chr)+,(p1);
or.b ulin,(p1);
suba.w vert,p1;
bra next;
Col05:
st (p1);
move bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
bra next;
Col06:
move.b (chr)+,(p1);
move.b (nch)+,(p2);
move bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
or.b ulin,0(p1,dadr.w);
and.b nuln,0(p2,dadr.w);
bra next;
Col07:
st (p1);
move.b (nch)+,(p2);
move bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (nch)+,0(p2,dadr.w);
and.b nuln,0(p2,dadr.w);
bra next;
Col08:
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
adda.w bpr,p2;
move.b (chr)+,(p2);
or.b ulin,(p2);
suba.w vert,p2;
bra next;
Col09:
move.b (nch)+,(p1);
move.b (chr)+,(p2);
move bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
and.b nuln,0(p1,dadr.w);
or.b ulin,0(p2,dadr.w);
bra next;
Col10:
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
adda.w bpr,p2;
st (p2);
suba.w vert,p2;
bra next;
Col11:
move.b (nch)+,(p1);
st (p2);
move bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (nch)+,0(p1,dadr.w);
st 0(p2,dadr.w);
and.b nuln,0(p1,dadr.w);
bra next;
Col12:
move.b (chr),(p1);
move.b (chr)+,(p2);
move bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
move.b (chr),0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
or.b ulin,0(p1,dadr.w);
or.b ulin,0(p2,dadr.w);
bra next;
Col13:
st (p1);
move.b (chr)+,(p2);
move bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
move.b (chr)+,0(p2,dadr.w);
or.b ulin,0(p2,dadr.w);
bra next;
Col14:
move.b (chr)+,(p1);
st (p2);
move bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
move.b (chr)+,0(p1,dadr.w);
st 0(p2,dadr.w);
or.b ulin,0(p1,dadr.w);
bra next;
Col15:
st (p1);
st (p2);
move bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
add bpr,dadr;
st 0(p1,dadr.w);
st 0(p2,dadr.w);
next:
addq.l #1,p2;
addq.l #1,p1;
bra loop;
return:
move.l (A7)+,A5;
rts;
;---------------------------------------------------------------------------*)
; GetFontData
; A0: Pointer to font's chardata
; A1: Pointer to fontdata-Array
; D7: Line Modulo
ch EQUR A0;
fd EQUR A1;
ad EQUR A2;
j EQUR D0;
x EQUR D1;
c EQUR D2;
d EQUR D3;
e EQUR D4;
x1 EQUR D5;
x2 EQUR D6;
x3 EQUR D7;
GetFontData:
move.w D7,-(A7);
move #0,j;
jloop: move j,x;
asl #3,x;
move x,x1;
move x,x2;
move x,x3;
add #$600,x1;
add #$c00,x2;
add #$1200,x3;
lea 0(ch,j),ad;
; Byte 0:
move.b (ad),c;
move.b c,0(fd,x);
move.b c,d;
lsr.b #2,d;
bcc \1;
bset #0,d;
\1: move.b d,0(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,0(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,0(fd,x3);
; Byte 1:
adda.w (A7),ad
move.b (ad),c;
move.b c,1(fd,x);
move.b c,d;
lsr.b #2,d;
bcc \2;
bset #0,d;
\2: move.b d,1(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,1(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,1(fd,x3);
; Byte 2:
adda.w (A7),ad
move.b (ad),c;
move.b c,2(fd,x);
move.b c,d;
lsr.b #1,d;
bcc \3;
bset #0,d;
\3: move.b d,2(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,2(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,2(fd,x3);
; Byte 3:
adda.w (A7),ad
move.b (ad),c;
move.b c,3(fd,x);
move.b c,d;
lsr.b #1,d;
bcc \4;
bset #0,d;
\4: move.b d,3(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,3(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,3(fd,x3);
; Byte 4:
adda.w (A7),ad
move.b (ad),c;
move.b c,4(fd,x);
move.b c,4(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,4(fd,x2);
move.b e,4(fd,x3);
; Byte 5:
adda.w (A7),ad
move.b (ad),c;
move.b c,5(fd,x);
move.b c,5(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,5(fd,x2);
move.b e,5(fd,x3);
; Byte 6:
adda.w (A7),ad
move.b (ad),c;
move.b c,6(fd,x);
move.b c,d;
lsl.b #1,d;
bcc \7;
bset #7,d;
\7: move.b d,6(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,6(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,6(fd,x3);
; Byte 7:
adda.w (A7),ad
move.b (ad),c;
move.b c,7(fd,x);
move.b c,d;
lsl.b #1,d;
bcc \8;
bset #7,d;
\8: move.b d,7(fd,x1);
move.b c,e;
lsr.b #1,e;
or.b c,e;
move.b e,7(fd,x2);
move.b d,e;
lsr.b #1,e;
or.b d,e;
move.b e,7(fd,x3);
addq #1,j;
move j,x;
cmp #$30,x;
beq.s newlin;
cmp #$60,x;
beq.s newlin;
cmp #$90,x;
bne.s nextl;
newlin: move (A7),x;
asl #3,x;
sub #$30,x;
adda.w x,ch;
nextl: cmp #$c0,j;
blt jloop;
move.l fd,ad;
adda.w #$1800,ad;
move #$5ff,j;
invers: move.l (fd)+,c;
not.l c;
move.l c,(ad)+;
dbra j,invers;
lea 2(A7),A7;
rts;
END